/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： App_Protocol_J.h
** 模块名称： J协议处理模块
** 版 本 号： V1.0
** 作    者： 蒲磊
**
** 修改记录： 版本     修改人      时间         修改内容

******************************************************************************/
#ifndef __APP_PROTOCOL_J_H_
#define __APP_PROTOCOL_J_H_

/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp.h"
/******************************************************************************
* 宏定义 ('#define')
******************************************************************************/

/******************************************************************************
* 类型定义 ('typedef')
******************************************************************************/
typedef struct
{
    uint16_t 	Current;
    uint16_t 	Speed_Cnt;
    uint8_t		ErrCode;
    uint8_t		Volt_Level;

} stRECEIVED_DATA;


typedef struct
{
    uint8_t		Lamp;                   /*大灯状态*/
    uint8_t		Push;                   /*助推状态*/
    uint8_t		Pas;                    /*档位*/
    uint16_t    Speed_Limit;            /*限速值，分辨率：0.1Km/h*/
    uint8_t		Wheel_Diameter;         /*轮径，英寸*/
    uint8_t     Max_PWM;                /*助推时的最大PWM值，5S、KDS协议用*/
    uint8_t     Battery_Low;            /*电池欠压标志，5S协议有*/
    uint8_t     Assistant_Dir;          /*助力方向，0-正，1-负*/
    uint8_t     Assistant_Num;          /*助力磁钢数*/
    uint8_t     Assistant_Sensitivity;  /*助力灵敏度（助力过几个磁钢开始）*/
    uint8_t     Speed_Sensor_Num;       /*测速磁钢数量*/
    uint8_t     Start_Strength;         /*启动强度*/
    uint8_t     Handle_Push;            /*转把是否带助推*/
    uint8_t     Handle_Segement;        /*转把是否分档*/
    uint16_t    Low_Voltage;            /*系统欠压值，分辨率：0.1V*/
    uint16_t    Sys_Voltage;            /*系统电压值，分辨率：0.1V*/
    uint16_t    Current_Limit;          /*限流值，分辨率：0.1A*/
} stSEND_DATA;

typedef enum
{
    Send_Stop 			= 0,
    Send_Run_Data,
    Send_Config_Data,
    Send_Config_Data_OneTime,
} enSEND_DATA_TYPE;
/******************************************************************************
* 全局变量声明
******************************************************************************/

/******************************************************************************
* 函数声明
******************************************************************************/
void vPROTOCOL_Get_OneFrame(uint8_t *pData,uint16_t Len);
void vPROTOCOL_Loop(void);
void vPROTOCOL_Send_Run_Data(void);
void vPROTOCOL_Send_Config_Data(void);
void vPROTOCOL_Send_Config_Data_OneTime(void);


void vPROTOCOL_Set_Lamp(uint8_t State);
void vPROTOCOL_Set_Pas(int8_t Pas);
void vPROTOCOL_Set_Speed_Limit(uint16_t Speed);
void vPROTOCOL_Set_Wheel(uint16_t Wheel);
void vPROTOCOL_Set_Battery_Low(uint8_t Battery_Low);
void vPROTOCOL_Set_PWM(uint8_t PWM);
void vPROTOCOL_Set_Assistant_Dir(uint8_t Assistant_Dir);
void vPROTOCOL_Set_Assistant_Num(uint8_t Assistant_Num);
void vPROTOCOL_Set_Assistant_Sensitivity(uint8_t Assistant_Sensitivity);
void vPROTOCOL_Set_Speed_Sensor_Num(uint8_t Speed_Sensor_Num);
void vPROTOCOL_Set_Start_Strength(uint8_t Start_Strength);
void vPROTOCOL_Set_Handle_Push(uint8_t Handle_Push);
void vPROTOCOL_Set_Handle_Segement(uint8_t Handle_Segement);
void vPROTOCOL_Set_Low_Voltage(uint16_t Low_Voltage);
void vPROTOCOL_Set_Sys_Voltage(uint16_t Sys_Voltage);
void vPROTOCOL_Set_Current_Limit(uint16_t Current_Limit);

uint8_t ucPROTOCOL_Get_Volt_Level(void);
uint16_t usPROTOCOL_Get_Current(void);
uint16_t usPROTOCOL_Get_Speed_Cnt(void);
uint16_t usPROTOCOL_Get_Speed(void);
uint8_t ucPROTOCOL_Get_Errcode(void);
void vPROTOCOL_Send(void);

void vPROTOCOL_ResetCommunicationOverTime(void);
void vPROTOCOL_Set_Value_When_PowerOn(void);
void vPROTOCOL_Set_Value_When_ExitSetting(void);
int8_t cPROTOCOL_Get_Soc(void);
void vPROTOCOL_Set_Pas_Range(int8_t Pas_Range);

#endif
